package com.elitel.frame.main.entity.vo;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.util.List;

@Data
public class ServiceConfig {

    /**
     * 服务guid
     */
    @JSONField(ordinal = 1, name = "service_id")
    private String serviceId;
    /**
     * 服务名称
     */
    @JSONField(ordinal = 2, name = "service_name")
    private String serviceName;
    /**
     * 服务类型
     */
    @JSONField(ordinal = 3, name = "service_type")
    private String serviceType;
    /**
     * 业务类型
     */
    @JSONField(ordinal = 4, name = "business_type")
    private String businessType;
    /**
     * 状态
     */
    @JSONField(ordinal = 5, name = "status")
    private Integer status;
    /**
     * 备注
     */
    @JSONField(ordinal = 6, name = "remark")
    private String remark;
    /**
     * 是否分页
     */
    @JSONField(ordinal = 7, name = "page_flag")
    private Integer pageFlag;
    /**
     * 数据访问限制
     */
    @JSONField(ordinal = 8, name = "access_rule")
    private AccessRule accessRule;
    /**
     * 额外信息
     */
    @JSONField(ordinal = 9, name = "ext_info")
    private ExtInfo extInfo;
    /**
     * 查询参数列表
     */
    @JSONField(ordinal = 10, name = "query_param")
    private List<QueryParam> queryParam;

    @Data
    public static class AccessRule {
        /**
         * 是否启用
         */
        @JSONField(name = "enable")
        private Integer enable;
        /**
         * 站点字段
         */
        @JSONField(name = "stcd_field")
        private String stcdField;
        /**
         * 时间字段
         */
        @JSONField(name = "tm_field")
        private String tmField;
    }

    @Data
    public static class ExtInfo {
        /**
         * 请求方法，如GET、POST等
         */
        @JSONField(name = "request_method")
        private String requestMethod;

        /**
         * 请求的URL地址
         */
        @JSONField(name = "request_url")
        private String requestUrl;

        /**
         * 请求的头部信息
         */
        @JSONField(name = "request_header")
        private String requestHeader;

        /**
         * 内容类型，例如application/json、text/html等
         */
        @JSONField(name = "content_type")
        private String contentType;

        /**
         * 操作类型，用于描述特定的操作，如查询、更新等
         */
        @JSONField(name = "opt_type")
        private String optType;

        /**
         * SQL文本，用于记录或执行的SQL语句
         */
        @JSONField(name = "sql_text")
        private String sqlText;

        /**
         * 数据源，表示从哪个数据源获取数据
         */
        @JSONField(name = "data_source")
        private DataSource dataSource;

        /**
         * 聚合信息，包含有关聚合操作的信息或配置
         */
        @JSONField(name = "polymer_info")
        private PolymerInfo polymerInfo;
    }

    @Data
    public static class DataSource {
        /**
         * 数据库类型
         */
        @JSONField(name = "type")
        private String type;
        /**
         * 数据库连接URL
         */
        @JSONField(name = "url")
        private String url;
        /**
         * 数据库用户名
         */
        @JSONField(name = "user")
        private String user;
        /**
         * 数据库密码
         */
        @JSONField(name = "password")
        private String password;
    }

    @Data
    public static class PolymerInfo {
        /**
         * 服务ID1，用于标识特定的服务
         */
        @JSONField(name = "service_id1")
        private String serviceId1;

        /**
         * 服务ID2，用于进一步细化服务的标识
         */
        @JSONField(name = "service_id2")
        private String serviceId2;

        /**
         * 条件字段，用于指定查询的条件
         */
        @JSONField(name = "condition")
        private String condition;

        /**
         * 关系字段列表，用于描述不同数据之间的关联关系
         */
        @JSONField(name = "relation_field")
        private List<RelationField> relationField;

        /**
         * 查询字段列表，用于指定查询操作中涉及的字段
         */
        @JSONField(name = "query_field")
        private List<QueryField> queryField;

        /**
         * 结果字段列表，用于定义查询结果中包含的字段
         */
        @JSONField(name = "result_field")
        private List<ResultField> resultField;
    }

    @Data
    public static class RelationField {
        /**
         * 定义字段代码1
         */
        @JSONField(name = "field_code1")
        private String fieldCode1;
        /**
         * 定义字段代码2
         */
        @JSONField(name = "field_code2")
        private String fieldCode2;
        /**
         * 条件字段
         */
        @JSONField(name = "condition")
        private String condition;
    }

    @Data
    public static class QueryField {
        /**
         * 源服务ID，用于标识数据来源的服务或系统
         */
        @JSONField(name = "source_service_id")
        private String sourceServiceId;

        /**
         * 源字段代码，表示原始数据中的字段标识符
         */
        @JSONField(name = "source_field_code")
        private String sourceFieldCode;

        /**
         * 新字段代码，用于替换或更新源字段代码的新标识符
         */
        @JSONField(name = "new_field_code")
        private String newFieldCode;
    }

    @Data
    public static class ResultField {
        /**
         * 源服务ID，用于标识数据来源的服务或系统
         */
        @JSONField(name = "source_service_id")
        private String sourceServiceId;

        /**
         * 源字段代码，表示需要进行操作的原始字段标识符
         */
        @JSONField(name = "source_field_code")
        private String sourceFieldCode;

        /**
         * 新字段代码，当源字段代码需要变更时，使用此字段代码作为替代标识符
         */
        @JSONField(name = "new_field_code")
        private String newFieldCode;

        /**
         * 条件，描述在何种情况下源字段代码需要被替换为新的字段代码
         */
        @JSONField(name = "condition")
        private String condition;
    }

    @Data
    public static class QueryParam {
        /**
         * 字段代码，用于唯一标识一个字段
         */
        @JSONField(name = "field_code")
        private String fieldCode;

        /**
         * 字段名称，用于显示在界面上
         */
        @JSONField(name = "field_name")
        private String fieldName;

        /**
         * 源字段代码，表示数据来源的字段代码
         */
        @JSONField(name = "source_field_code")
        private String sourceFieldCode;

        /**
         * 源字段名称，表示数据来源的字段名称
         */
        @JSONField(name = "source_field_name")
        private String sourceFieldName;

        /**
         * 必填标志，表示该字段是否为必填项
         */
        @JSONField(name = "required_flag")
        private Integer requiredFlag;

        /**
         * 数据类型，定义字段的数据类型
         */
        @JSONField(name = "data_type")
        private String dataType;

        /**
         * 日期格式，如果字段类型为日期，则需要指定日期格式
         */
        @JSONField(name = "date_format")
        private String dateFormat;

        /**
         * 默认值，字段在未赋值时的默认值
         */
        @JSONField(name = "default_val")
        private String defaultVal;

        /**
         * 参数类型，表示字段的参数类型
         */
        @JSONField(name = "param_type")
        private Integer paramType;

        /**
         * 默认值，参数在未赋值时的默认值
         */
        @JSONField(name = "default_value")
        private String defaultValue;
    }
}

